19. 合成数据(Synthetic Data)与模型对齐
随着大模型的发展,人工标注已经逐渐成为瓶颈。
例如:
GPT-4
Claude
DeepSeek-R1
Gemini
背后大量数据并非全部来自人工。
而是:
人工设计规则 + 大模型自动生成数据
这种方式通常称为:
Synthetic Data
合成数据
为什么需要合成数据
人工标注的问题:
| 问题 | 描述 |
|---|---|
| 成本高 | 专家标注非常昂贵 |
| 速度慢 | 数据增长有限 |
| 覆盖不足 | 难以覆盖长尾问题 |
| 质量不一致 | 不同标注员标准不同 |
因此工业界越来越多采用:
Human → AI → Human
的混合模式。
合成数据流水线
一个典型的数据生成流程:
flowchart LR A[Prompt Template] --> B[LLM生成数据] --> C[数据过滤] --> D[格式转换] --> E[质量评分] --> F[训练数据]
第一步:生成(Generation)
使用已有大模型生成:
Question
Answer
Reasoning
Tool Use
Code
等数据。
例如:
请生成10个高中数学问题及答案
模型输出:
Question
Answer
数据对。
自动生成流程
graph TD A[Prompt Template] --> B[LLM] B --> C[Question] B --> D[Answer] B --> E[Think]
Template Engineering
实际生成时通常使用模板工程。
模板中可以控制:
- 主题
- 风格
- 难度
- 领域
- 数量
- 多样性
例如:
领域:
数学
难度:
高中
风格:
逐步推导
生成:
100个问题
模板:
请生成{数量}个{领域}问题
要求:
难度:{难度}
风格:{风格}
输出:
Question
Think
Answer
第二步:过滤(Filtering)
生成的数据并不能直接训练。
因为:
Garbage In
Garbage Out
垃圾数据会直接降低模型质量。
因此需要过滤。
为什么过滤重要
例如生成:
Question:
1+1=?
Answer:
3
显然错误。
或者:
<think>
因为今天星期三
所以答案是北京
</think>
逻辑混乱。
这些数据必须删除。
过滤流程
graph TD A[原始生成数据] --> B[格式检查] --> C[正确性检查] --> D[推理检查] --> E[保留高质量样本]
LLM作为过滤器
现代训练中经常使用:
LLM as a Judge
即:
让一个更强模型评价较弱模型。
例如:
GPT-4
Claude
DeepSeek-V3
担任评审。
评分维度:
正确性
逻辑性
格式规范
推理质量
可读性
第三步:转换(Transformation)
即使答案正确。
格式也未必适合训练。
因此需要转换。
例如:
原始数据:
问题:
苹果有几个?
答案:
5
转换后:
<user>
苹果有几个?
</user>
<assistant>
5
</assistant>
常见转换
对话格式
Question → Chat
CoT格式
Answer
↓
Think + Answer
风格转换
正式
↓
口语化
长度扩展
一句话
↓
详细解释
数据转换流程
graph LR A[Raw Data] --> B[Format Transform] --> C[Style Transform] --> D[Training Data]
第四步:评分(Scoring)
最后一步:
质量评分。
评分维度通常包括:
| 指标 | 含义 |
|---|---|
| Correctness | 是否正确 |
| Reasoning | 推理质量 |
| Helpfulness | 是否有帮助 |
| Safety | 是否安全 |
| Format | 是否符合格式 |
| Length | 长度是否合理 |
例如:
Correctness = 9
Reasoning = 8
Format = 10
综合:
Score = 9.0
合成数据完整流程
graph TD A[Template] --> B[Generate] --> C[Filter] --> D[Transform] --> E[Score] --> F[Training Data]
Constitutional AI(宪法AI)
Anthropic 提出了著名的:
Constitutional AI
核心思想:
不依赖大量人工反馈,而是让AI根据一套规则自我监督。
第一阶段:基于宪法的SFT
首先由专家制定:
Constitution
即:
- 安全原则
- 价值观
- 行为规范
例如:
不要鼓励违法行为
不要泄露隐私
保持诚实
流程:
graph TD A[编写宪法] --> B[基础模型生成回答] --> C[AI批判回答] --> D[AI修正回答] --> E[SFT训练] --> F[Fine-tuned Model]
第二阶段:RLAIF
RLAIF:
Reinforcement Learning from AI Feedback
即:
AI反馈强化学习。
不再依赖人工排序。
而是:
AI自己比较。
流程:
graph TD A[Prompt] --> B[生成回答A] A --> C[生成回答B] B --> D[AI评审] C --> D D --> E[Preference Data] E --> F[Reward Model] F --> G[RL训练] G --> H[Aligned Model]
数据比例的重要性
很多训练失败原因:
不是数据太少。
而是:
数据配比错误
一个错误案例
训练:
90% 编程
10% 其它
结果:
代码能力很强
但:
聊天能力下降
能力遗忘问题
例如:
微积分助手。
训练后:
微积分:95分
但是:
历史:20分
写作:10分
聊天:0分
这称为:
Catastrophic Forgetting
灾难性遗忘
一个更合理的数据比例
例如通用助手:
| 类型 | 比例 |
|---|---|
| 通用对话 | 60% |
| 专业任务 | 30% |
| 安全数据 | 10% |
注意:
这只是经验值。
并不存在万能比例。
如何确定比例
最佳实践:
graph TD A[小规模训练] --> B[评估] --> C[误差分析] --> D[调整比例] D --> E[重新训练]
而不是:
一次训练100万条
奖励函数也需要平衡
奖励并不是单一指标。
通常是多个目标组合。
例如:
Reward
=
0.4 × Helpfulness
+
0.4 × Safety
+
0.2 × Truthfulness
奖励冲突问题
模型经常面临:
简洁
VS
完整
例如:
回答:
是。
很简洁。
但毫无帮助。
回答:
5000字长文
很完整。
但用户不想看。
因此需要:
奖励上限
长度约束
多目标优化
共同控制。
训练通用能力还是专业能力?
这是所有后训练项目都会面对的问题:
能力增强
VS
能力保留
例如:
训练一个微积分模型。
目标:
微积分能力 ↑
但同时希望:
聊天能力保留
数学其它领域保留
代码能力保留
因此现代训练通常采用:
graph TD A[专业数据] --> C[混合训练] B[通用数据] --> C C --> D[评估] D --> E[能力保持检查]
总结
合成数据已经成为现代大模型训练的核心基础设施。
完整流程通常为:
Generate
→ Filter
→ Transform
→ Score
→ Train
而在模型对齐中,Anthropic 的 Constitutional AI 和 RLAIF 展示了一条重要路线:
用 AI 生成数据、AI 评审数据、AI 训练奖励模型,再通过 RL 完成对齐。
最终决定模型质量的往往不是数据量,而是:
数据质量、数据配比、奖励设计以及是否保留原有通用能力。